package main

import (
	"context"
	"encoding/json"
	"fmt"
	"github.com/chromedp/chromedp"
	"goway/weixin/args"
	"log"
	"strings"
	"time"
)
func myTasks() chromedp.Tasks {
	return chromedp.Tasks{
		loadCookies(),
		chromedp.Navigate(args.LoginURL),
		checkLoginStatus(),
		getCode(),
		saveCookies(),
		chromedp.Sleep(10*time.Second),
	}
}

// 检查是否登陆
func checkLoginStatus() chromedp.ActionFunc {
	return func(ctx context.Context) (err error) {
		var url string
		var token string
		if err = chromedp.Evaluate(`window.location.href`, &url).Do(ctx); err != nil {
			return
		}
		if strings.Contains(url, "https://mp.weixin.qq.com/cgi-bin/home") {
			fmt.Println("已经使用cookies登陆")
			token,err=getToken(url)
			if err!=nil{
				fmt.Println("get Token err",url)
				return
			}
			args.Token=token
			args.IsLogin=true
			args.NewCardUrl=fmt.Sprintf(args.NewCardUrl,args.Token)
			args.SearchByAccount=fmt.Sprintf(args.SearchByAccount,query,args.Token)

			if err = chromedp.Run(ctx, afterLoginTasks()); err != nil {
				log.Fatal(err)
				return
			}

		}
		return
	}
}


func afterLoginTasks() chromedp.Tasks {
	return chromedp.Tasks{
		GetFakeId(),
		GetList(),
	}
}
type respFakeid struct {
	Total int `json:"total"`
	BaseResp struct{
		Ret int `json:"ret"`
		ErrMsg string `json:"err_msg"`
	} `json:"base_resp"`
	List []struct{
		Fakeid string `json:"fakeid"`
	} `json:"list"`
}
func GetFakeId() chromedp.ActionFunc {
	return func(ctx context.Context) (err error) {
		header:=map[string]string{
			`cookie`:BuildCookies(args.Cookies),
		}
		var res []byte
		res,err=FetchCommonGet(args.SearchByAccount,header,nil)
		if err!=nil{
			fmt.Println("get fakeid err",err)
			ctx.Deadline()
		}
		var jsonObj respFakeid
		err=json.Unmarshal(res,&jsonObj)
		if err!=nil{
			fmt.Println("Unmarshal fakeid err",err)
			ctx.Deadline()
		}
		if jsonObj.BaseResp.ErrMsg!=`ok`{
			fmt.Println("err_msg=",jsonObj.BaseResp.ErrMsg,err)
			ctx.Deadline()
		}
		args.Fakeid=jsonObj.List[0].Fakeid
		return
	}
}

type resListObj struct {
	AppMsgCnt int `json:"app_msg_cnt"`
	AppMsgList []struct{
		Digest string `json:"digest"`
		Link string `json:"link"`
		Title string `json:"title"`
	} `json:"app_msg_list"`
	BaseResp struct{
		Ret int `json:"ret"`
		ErrMsg string `json:"err_msg"`
	} `json:"base_resp"`

}
func GetList() chromedp.ActionFunc {
	return func(ctx context.Context) (err error) {
		header:=map[string]string{
			`cookie`:BuildCookies(args.Cookies),
		}
		url:=fmt.Sprintf(args.ListUrl,0,args.Fakeid,args.Token)
		fmt.Println(url)
		var res []byte
		res,err=FetchCommonGet(url,header,nil)
		if err!=nil{
			fmt.Println("get list err",err)
			ctx.Deadline()
		}
		var jsonObj resListObj
		err=json.Unmarshal(res,&jsonObj)
		if err!=nil{
			fmt.Println("Unmarshal fakeid err",err)
			ctx.Deadline()
		}
		if jsonObj.BaseResp.ErrMsg!=`ok`{
			fmt.Println("err_msg=",jsonObj.BaseResp.ErrMsg,err)
			ctx.Deadline()
		}
		list:=jsonObj.AppMsgList
		for _,v:=range list{
			fmt.Println(v.Title,v.Link)
		}
		return
	}
}









